查看原文
其他

Redspot v0.4 提案部分调整,支持多合约、Docker 编译等

Patract Patract开放平台 2021-10-13


我们当前对 Redspot v0.4的规划跟之前的早期规划有比较大的改变。在早期的v0.4规格中,我们预计的计划当前不适用:


1.对于合约的 Typescript 支持:我们经过讨论并与Jacob 沟通后(polkadot.js 中的 api-contract 支持 Typescript 的规划),认为其重要性并不高且不影响当前的使用,因此对于合约 Typescript 的支持放在 api-contract 支持这个功能之后。


2.集成多语言的 SDK:由于 pallet-contracts 在3.0.0中改变了调用接口且近期改动巨大,因此 Patract 的 Himalia 项目当前只有 Go 版本的追上了最新的变更,Python 版本还未及时更新。而且 Java 版本和 c# 版本还未启动,因此多语言的 SDK 还未准备充分,从而暂时无法在这个版本中集成到 Redspot 中。


因此在本 Redspot v0.4 的计划中,我们主要的规划变更为如下:


1.多合约支持:在 ink! 与 cargo-contracts 近期的更新中终于能正常编译多合约。因此 Redspot 将会重新修正关于多合约的支持系统。


2.支持 Docker 编译:由于当前在不同环境下,Wasm 编译结果会不一致(例如Substrate 的Runtime为了解决这个问题采用了Srtool注1,另一方面在不同的操作系统下搭建编译环境可能存在困难(例如Windows),因此支持 Docker 可以解决很多环境问题。


3.Redspot  的 Web 界面:虽然 Redspot 基本上是一个命令行工具,但是对于刚入门的程序员来说并没有很大的吸引力。因此 Redspot 计划引入一个类似于 Canvas-UI 的合约部署操作界面,并在这个界面上附加丰富的功能,在产品设计上强化和合约相关的属性并将 Redspot 的一些功能变得可视化。而且这个界面还可以增加额外的功能例如调用 polkadot.js 插件进行交易签名(命令行的 Redspot 中无法调用浏览器插件)。


4.增加一些其他的插件,丰富 Redspot 生态,例如针对链的 Types 支持,监控文件变更插件等等。


Redspot v0.4 的详细规划


1. 多合约支持


ink! 与 cargo-contracts 编译多合约的问题在 cargo-contract PR#199注2提交后获得了修正。因此 Redspot 可以重新开始支持多合约编译的项目(Redspot 曾经一定程度支持多合约组织结构,但是由于无法编译而被搁置)。


Redspot 的多合约支持将会从以下几个方面入手:


  • 多合约文件结构索引与识别


  • redspot.config.ts 支持文件索引的配置方式


  • 编译产物的判定与整理(包括重名合约的编译产物的处理)


  • 支持使用多种语言混合编译


Redspot 会通过配置的查找目录,自动的查找该目录下的所有合约文件。然后通过配置的编译工具进行编译处理,最终会将所有编译产物输出到 Artifacts 目录中。同时会生成一个 BuildInfo 文件,里面记录着编译前的项目目录结构。


2. 支持 Docker 编译


在 Redspot 内支持 Docker 的调用可以解决很多与环境搭建相关的问题。相关的讨论见 Patract 提交的 cargo-contract issue #188注3 与 cargo-contract issue #184注4。因此当我们注意到当 Scripts 的 ci 中出现了 cargo-contracts 的 Dockerfile 之后,contracts! CI for Linux Distributions注5就可以给 Redspot 添加调用 Docker 的相关功能了。


Redspot 将检测是否存在 Docker 环境。并自动拉取指定的版本的 Docker  Image。另一方面 Redspot 将会维护一个 Docker Image 作为默认的测试网。


3. Redspot 的 Web 界面


由于 Redspot 的主体功能已经比较完善,因此 Redspot 的后续可以在产品上做更多的易用化方面的开发。例如给 Redspot 提供合约相关的 UI 界面,可以让初学者更容易的上手合约开发过程,另一方面 Redspot 中存在一些功能需要唤起浏览器参与相应操作(例如调用 polkadot.js extension 进行签名),因此可以一起集成到 Web 界面中。


虽然parity已经提供了 Canvas-UI 注6以及 Polkadot Apps 注7,但是这两者在合约部分的特化上达不到我们的产品要求。例如 Canvas-UI 虽然提供了比较直观的合约操作界面,但是其不携带和链相关的展示信息,Apps 虽然是一个比较全面的信息展示,合约调用部分也比 Canvas-UI 强,但是无论 Canvas-UI 或者是 Apps 在与合约相关的功能部分依然比较缺乏,例如扫描、记录已经有的合约,解析合约的参数,与Redspot配置中的秘钥进行关联等等。


另一方面如 Truffle 一样,Redspot 也将设计为可以用于生产环境中进行部署合约,因此 Redspot 需要提供安全的签署交易的手段。例如将来能使用 Ledger,parity-signer 等硬件钱包进行部署和调用合约的交易签署。这样开发者使用类似 Development 的配置,配置测试秘钥在测试环境中测试合约后,然后切换生产环境,配置生产环境的秘钥进行合约部署即可。为了兼顾所有环境,我们认为唤起浏览器进行交互是比较好的一种手段。因此本次我们尝试将集成 polkadot.js extension 的调用。


总结而言,Redspot 的 Web 界面将会给初学者提供丰富的信息入门合约操作,并且也集成了一些无法在 CLI 环境下处理的操作:


  • 界面将会包含链的区块,交易,事件等基础信息,同时合约操作界面类似于 Canvas-UI。


  • Web将会扫描或记录(根据不同的链有不同的策略)已经存在的合约,并读取 Redspot 的 Config 环境与已有的秘钥进行关联。


  • Web 界面将会在合约界面详细展示与合约操作相关的信息,例如某次合约调用中的 Gas,Selector,参数内容等等。


  • Web 界面将会对 Redspot 的一些操作做可视化,例如引入 Redspot 的控制台界面,显示执行操作的日志,或者能显示测试、脚本信息,并通过界面调用执行。


  • 当在 Redspot 的 Config 中配置为安全性的秘钥时,会需要 Web 界面调用 polkadot.js 进行交易签署。


  • 支持合约的 Storage 查询。


  • 将会自动上传本地的最新编译产物。方便手动部署和调用合约。

4. 增加一些其他的插件

本次将会在v0.3的基础上继续增加一些新的插件,以丰富 Redspot 的功能:

  • Redspot-Watcher

当前 Redspot 在执行命令如 redspot test, redspot console 等无法检查执行的时候合约文件是否有修改。因此需要开发者自己判断合约是否需要编译并加上--no-compiled 命令以告知 Redspot 本次执行不需要编译合约。因此当引入redspot-watcher之后,在调用 Redspot Runtime 执行前,就可以由 Redspot-watcher 判定是否有文件改动,从而判定是否需要调用编译过程。

redspot-watcher 会修改 redspot 的 test, run 和 console 命令。每次运行前,将会计算文件 Hash 并且存入 Buildinfo 文件,然后和上一次文件 Hash 对比,如果没有变化,则跳过编译。

  • Balances 精度插件


在 web3.js 中,可以使用1 ETH 等方式以替代类似10000...000 这类的输入。这种 human-readable 的方式在开发者编写脚本和测试的过程中可以极大减少犯错的概率。但是又由于 Ethereum 的精度是固定的,而 Substrate 引入 pallet-contracts 时,精度由这条链所决定,因此该插件并非是静态的转换,而是需要获取到链的相关信息(精度,符号)才能进行转换。

因此该插件的最终将会实现类似以下的功能:

'1 DOT' = '10000000000'
'1 KSM' = '1000000000000'
'1 nano' = 10-9 * 这条链的精度

  • Default Blockchain Types 插件

由于当前 Substrate 还未集成 scale-info,因此每条链都提供了types来支持polkadot.js的解析。当前Redspot要求开发者将Types信息填写到redspot.config.ts 中,这种方式给开发者造成了一些麻烦。这个插件通过获取 apps 中已经存在的不同链的 Types,默认提供给 polkadot.js,并允许开发者在 redspot.config.ts 进行覆写的形式,让大多数情况下开发者无需担忧需要给 polkadot.js 提供 Types 的问题。

我们将和 Polkadot Apps 商量,希望能够发布 @polkadot/apps-config 这个包。然后将会注册这个包中提供的所有 Types. 我们也会对已知的有 Wasm 功能合约链,进行处理。维护他们的测试链的 Types 。这样只要使用是正确设置 Specversion 的链,就无需担心 Version 了。

注解

1.Srtool 链接:https://github.com/paritytech/srtool

2.Cargo-contract PR##199 链接:

https://github.com/paritytech/cargo-contract/pull/199

3.cargo-contract issue #188 链接:

https://github.com/paritytech/cargo-contract/issues/188

4.cargo-contract issue #184链接:

https://github.com/paritytech/cargo-contract/issues/184

5.contracts! CI for Linux Distributions链接:

https://github.com/paritytech/scripts/tree/master/dockerfiles/contracts-ci-linux

6.Canvas-UI 链接:https://paritytech.github.io/canvas-ui/#/

7.Polkadot Apps 链接:https://polkadot.js.org/apps


About Patract 


Patract 为波卡 Wasm 合约生态的平行链和 DApp 开发提供解决方案。我们帮助社区平行链设计和开发链上合约模块和 Runtime 支持,并且为 DApp 开发者提供覆盖开发、测试、调试、部署、监控、数据提供和前端开发等阶段的全栈工具和服务支持。

How to join Patract


1.对于合约开发者,可以访问官网 (https://patract.io),熟悉测试链和工具套件。欢迎加入官方开发群:
Element
(https://app.element.io/#/room/#PatractLabsDev:matrix.org)
Discord(https://discord.gg/wJ8TnTfjcq)
 
2.对于将要集成 Wasm 合约功能的平行链项目方,或者使用 Wasm 合约开发的 DApp 项目方,商务合作欢迎联系 santry@patract.io
 
3.对于用户,欢迎加入:
Telegram(https://t.me/patract)
Twitter(https://twitter.com/PatractLabs)
 
4.对于求职者,我们在招聘区块链开发工程师、前端/全栈开发工程师、开发者运营等岗位,可以联系 sean@patract.io

扫码加入Patract 微信开发群

往期精彩:

//波卡的Wasm和以太坊2.0的eWasm相对于EVM虚拟机的绝对优势

//Substrate 合约书之合约综述
//微众银行区块链开源基于Rust的Wasm合约语言框架Liquid

: . Video Mini Program Like ,轻点两下取消赞 Wow ,轻点两下取消在看

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存